home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Compilers / digital marsC compier / dm / include / win32 / Winspool.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-08  |  51.4 KB  |  2,137 lines

  1. /*++
  2.  
  3. Copyright (c) 1990-1996  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     WinSpool.h
  8.  
  9. Abstract:
  10.  
  11.     Header file for Print APIs
  12.  
  13. Revision History:
  14.  
  15. --*/
  16.  
  17. #ifndef _WINSPOOL_
  18. #define _WINSPOOL_
  19.  
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. #ifdef _WINUSER_
  26. #include <prsht.h>
  27. #endif
  28.  
  29. typedef struct _PRINTER_INFO_1A {
  30.     DWORD   Flags;
  31.     LPSTR   pDescription;
  32.     LPSTR   pName;
  33.     LPSTR   pComment;
  34. } PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
  35. typedef struct _PRINTER_INFO_1W {
  36.     DWORD   Flags;
  37.     LPWSTR  pDescription;
  38.     LPWSTR  pName;
  39.     LPWSTR  pComment;
  40. } PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
  41. #ifdef UNICODE
  42. typedef PRINTER_INFO_1W PRINTER_INFO_1;
  43. typedef PPRINTER_INFO_1W PPRINTER_INFO_1;
  44. typedef LPPRINTER_INFO_1W LPPRINTER_INFO_1;
  45. #else
  46. typedef PRINTER_INFO_1A PRINTER_INFO_1;
  47. typedef PPRINTER_INFO_1A PPRINTER_INFO_1;
  48. typedef LPPRINTER_INFO_1A LPPRINTER_INFO_1;
  49. #endif // UNICODE
  50.  
  51. typedef struct _PRINTER_INFO_2A {
  52.     LPSTR     pServerName;
  53.     LPSTR     pPrinterName;
  54.     LPSTR     pShareName;
  55.     LPSTR     pPortName;
  56.     LPSTR     pDriverName;
  57.     LPSTR     pComment;
  58.     LPSTR     pLocation;
  59.     LPDEVMODEA pDevMode;
  60.     LPSTR     pSepFile;
  61.     LPSTR     pPrintProcessor;
  62.     LPSTR     pDatatype;
  63.     LPSTR     pParameters;
  64.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  65.     DWORD   Attributes;
  66.     DWORD   Priority;
  67.     DWORD   DefaultPriority;
  68.     DWORD   StartTime;
  69.     DWORD   UntilTime;
  70.     DWORD   Status;
  71.     DWORD   cJobs;
  72.     DWORD   AveragePPM;
  73. } PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
  74. typedef struct _PRINTER_INFO_2W {
  75.     LPWSTR    pServerName;
  76.     LPWSTR    pPrinterName;
  77.     LPWSTR    pShareName;
  78.     LPWSTR    pPortName;
  79.     LPWSTR    pDriverName;
  80.     LPWSTR    pComment;
  81.     LPWSTR    pLocation;
  82.     LPDEVMODEW pDevMode;
  83.     LPWSTR    pSepFile;
  84.     LPWSTR    pPrintProcessor;
  85.     LPWSTR    pDatatype;
  86.     LPWSTR    pParameters;
  87.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  88.     DWORD   Attributes;
  89.     DWORD   Priority;
  90.     DWORD   DefaultPriority;
  91.     DWORD   StartTime;
  92.     DWORD   UntilTime;
  93.     DWORD   Status;
  94.     DWORD   cJobs;
  95.     DWORD   AveragePPM;
  96. } PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
  97. #ifdef UNICODE
  98. typedef PRINTER_INFO_2W PRINTER_INFO_2;
  99. typedef PPRINTER_INFO_2W PPRINTER_INFO_2;
  100. typedef LPPRINTER_INFO_2W LPPRINTER_INFO_2;
  101. #else
  102. typedef PRINTER_INFO_2A PRINTER_INFO_2;
  103. typedef PPRINTER_INFO_2A PPRINTER_INFO_2;
  104. typedef LPPRINTER_INFO_2A LPPRINTER_INFO_2;
  105. #endif // UNICODE
  106.  
  107. typedef struct _PRINTER_INFO_3 {
  108.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  109. } PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;
  110.  
  111. typedef struct _PRINTER_INFO_4A {
  112.     LPSTR   pPrinterName;
  113.     LPSTR   pServerName;
  114.     DWORD   Attributes;
  115. } PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;
  116. typedef struct _PRINTER_INFO_4W {
  117.     LPWSTR  pPrinterName;
  118.     LPWSTR  pServerName;
  119.     DWORD   Attributes;
  120. } PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;
  121. #ifdef UNICODE
  122. typedef PRINTER_INFO_4W PRINTER_INFO_4;
  123. typedef PPRINTER_INFO_4W PPRINTER_INFO_4;
  124. typedef LPPRINTER_INFO_4W LPPRINTER_INFO_4;
  125. #else
  126. typedef PRINTER_INFO_4A PRINTER_INFO_4;
  127. typedef PPRINTER_INFO_4A PPRINTER_INFO_4;
  128. typedef LPPRINTER_INFO_4A LPPRINTER_INFO_4;
  129. #endif // UNICODE
  130.  
  131. typedef struct _PRINTER_INFO_5A {
  132.     LPSTR   pPrinterName;
  133.     LPSTR   pPortName;
  134.     DWORD   Attributes;
  135.     DWORD   DeviceNotSelectedTimeout;
  136.     DWORD   TransmissionRetryTimeout;
  137. } PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;
  138. typedef struct _PRINTER_INFO_5W {
  139.     LPWSTR  pPrinterName;
  140.     LPWSTR  pPortName;
  141.     DWORD   Attributes;
  142.     DWORD   DeviceNotSelectedTimeout;
  143.     DWORD   TransmissionRetryTimeout;
  144. } PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;
  145. #ifdef UNICODE
  146. typedef PRINTER_INFO_5W PRINTER_INFO_5;
  147. typedef PPRINTER_INFO_5W PPRINTER_INFO_5;
  148. typedef LPPRINTER_INFO_5W LPPRINTER_INFO_5;
  149. #else
  150. typedef PRINTER_INFO_5A PRINTER_INFO_5;
  151. typedef PPRINTER_INFO_5A PPRINTER_INFO_5;
  152. typedef LPPRINTER_INFO_5A LPPRINTER_INFO_5;
  153. #endif // UNICODE
  154.  
  155. typedef struct _PRINTER_INFO_6 {
  156.     DWORD   dwStatus;
  157. } PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;
  158.  
  159.  
  160.  
  161. #define PRINTER_CONTROL_PAUSE            1
  162. #define PRINTER_CONTROL_RESUME           2
  163. #define PRINTER_CONTROL_PURGE            3
  164. #define PRINTER_CONTROL_SET_STATUS       4
  165.  
  166. #define PRINTER_STATUS_PAUSED            0x00000001
  167. #define PRINTER_STATUS_ERROR             0x00000002
  168. #define PRINTER_STATUS_PENDING_DELETION  0x00000004
  169. #define PRINTER_STATUS_PAPER_JAM         0x00000008
  170. #define PRINTER_STATUS_PAPER_OUT         0x00000010
  171. #define PRINTER_STATUS_MANUAL_FEED       0x00000020
  172. #define PRINTER_STATUS_PAPER_PROBLEM     0x00000040
  173. #define PRINTER_STATUS_OFFLINE           0x00000080
  174. #define PRINTER_STATUS_IO_ACTIVE         0x00000100
  175. #define PRINTER_STATUS_BUSY              0x00000200
  176. #define PRINTER_STATUS_PRINTING          0x00000400
  177. #define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800
  178. #define PRINTER_STATUS_NOT_AVAILABLE     0x00001000
  179. #define PRINTER_STATUS_WAITING           0x00002000
  180. #define PRINTER_STATUS_PROCESSING        0x00004000
  181. #define PRINTER_STATUS_INITIALIZING      0x00008000
  182. #define PRINTER_STATUS_WARMING_UP        0x00010000
  183. #define PRINTER_STATUS_TONER_LOW         0x00020000
  184. #define PRINTER_STATUS_NO_TONER          0x00040000
  185. #define PRINTER_STATUS_PAGE_PUNT         0x00080000
  186. #define PRINTER_STATUS_USER_INTERVENTION 0x00100000
  187. #define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000
  188. #define PRINTER_STATUS_DOOR_OPEN         0x00400000
  189. #define PRINTER_STATUS_SERVER_UNKNOWN    0x00800000
  190. #define PRINTER_STATUS_POWER_SAVE        0x01000000
  191.  
  192.  
  193. #define PRINTER_ATTRIBUTE_QUEUED         0x00000001
  194. #define PRINTER_ATTRIBUTE_DIRECT         0x00000002
  195. #define PRINTER_ATTRIBUTE_DEFAULT        0x00000004
  196. #define PRINTER_ATTRIBUTE_SHARED         0x00000008
  197. #define PRINTER_ATTRIBUTE_NETWORK        0x00000010
  198. #define PRINTER_ATTRIBUTE_HIDDEN         0x00000020
  199. #define PRINTER_ATTRIBUTE_LOCAL          0x00000040
  200.  
  201. #define PRINTER_ATTRIBUTE_ENABLE_DEVQ       0x00000080
  202. #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS   0x00000100
  203. #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
  204.  
  205. #define PRINTER_ATTRIBUTE_WORK_OFFLINE   0x00000400
  206. #define PRINTER_ATTRIBUTE_ENABLE_BIDI    0x00000800
  207. #define PRINTER_ATTRIBUTE_RAW_ONLY       0x00001000
  208.  
  209.  
  210. #define NO_PRIORITY   0
  211. #define MAX_PRIORITY 99
  212. #define MIN_PRIORITY  1
  213. #define DEF_PRIORITY  1
  214.  
  215. typedef struct _JOB_INFO_1A {
  216.    DWORD    JobId;
  217.    LPSTR      pPrinterName;
  218.    LPSTR      pMachineName;
  219.    LPSTR      pUserName;
  220.    LPSTR      pDocument;
  221.    LPSTR      pDatatype;
  222.    LPSTR      pStatus;
  223.    DWORD    Status;
  224.    DWORD    Priority;
  225.    DWORD    Position;
  226.    DWORD    TotalPages;
  227.    DWORD    PagesPrinted;
  228.    SYSTEMTIME Submitted;
  229. } JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
  230. typedef struct _JOB_INFO_1W {
  231.    DWORD    JobId;
  232.    LPWSTR     pPrinterName;
  233.    LPWSTR     pMachineName;
  234.    LPWSTR     pUserName;
  235.    LPWSTR     pDocument;
  236.    LPWSTR     pDatatype;
  237.    LPWSTR     pStatus;
  238.    DWORD    Status;
  239.    DWORD    Priority;
  240.    DWORD    Position;
  241.    DWORD    TotalPages;
  242.    DWORD    PagesPrinted;
  243.    SYSTEMTIME Submitted;
  244. } JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
  245. #ifdef UNICODE
  246. typedef JOB_INFO_1W JOB_INFO_1;
  247. typedef PJOB_INFO_1W PJOB_INFO_1;
  248. typedef LPJOB_INFO_1W LPJOB_INFO_1;
  249. #else
  250. typedef JOB_INFO_1A JOB_INFO_1;
  251. typedef PJOB_INFO_1A PJOB_INFO_1;
  252. typedef LPJOB_INFO_1A LPJOB_INFO_1;
  253. #endif // UNICODE
  254.  
  255. typedef struct _JOB_INFO_2A {
  256.    DWORD    JobId;
  257.    LPSTR      pPrinterName;
  258.    LPSTR      pMachineName;
  259.    LPSTR      pUserName;
  260.    LPSTR      pDocument;
  261.    LPSTR      pNotifyName;
  262.    LPSTR      pDatatype;
  263.    LPSTR      pPrintProcessor;
  264.    LPSTR      pParameters;
  265.    LPSTR      pDriverName;
  266.    LPDEVMODEA pDevMode;
  267.    LPSTR      pStatus;
  268.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  269.    DWORD    Status;
  270.    DWORD    Priority;
  271.    DWORD    Position;
  272.    DWORD    StartTime;
  273.    DWORD    UntilTime;
  274.    DWORD    TotalPages;
  275.    DWORD    Size;
  276.    SYSTEMTIME Submitted;    // Time the job was spooled
  277.    DWORD    Time;           // How many seconds the job has been printing
  278.    DWORD    PagesPrinted;
  279. } JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
  280. typedef struct _JOB_INFO_2W {
  281.    DWORD    JobId;
  282.    LPWSTR     pPrinterName;
  283.    LPWSTR     pMachineName;
  284.    LPWSTR     pUserName;
  285.    LPWSTR     pDocument;
  286.    LPWSTR     pNotifyName;
  287.    LPWSTR     pDatatype;
  288.    LPWSTR     pPrintProcessor;
  289.    LPWSTR     pParameters;
  290.    LPWSTR     pDriverName;
  291.    LPDEVMODEW pDevMode;
  292.    LPWSTR     pStatus;
  293.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  294.    DWORD    Status;
  295.    DWORD    Priority;
  296.    DWORD    Position;
  297.    DWORD    StartTime;
  298.    DWORD    UntilTime;
  299.    DWORD    TotalPages;
  300.    DWORD    Size;
  301.    SYSTEMTIME Submitted;    // Time the job was spooled
  302.    DWORD    Time;           // How many seconds the job has been printing
  303.    DWORD    PagesPrinted;
  304. } JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
  305. #ifdef UNICODE
  306. typedef JOB_INFO_2W JOB_INFO_2;
  307. typedef PJOB_INFO_2W PJOB_INFO_2;
  308. typedef LPJOB_INFO_2W LPJOB_INFO_2;
  309. #else
  310. typedef JOB_INFO_2A JOB_INFO_2;
  311. typedef PJOB_INFO_2A PJOB_INFO_2;
  312. typedef LPJOB_INFO_2A LPJOB_INFO_2;
  313. #endif // UNICODE
  314.  
  315. typedef struct _JOB_INFO_3 {
  316.     DWORD   JobId;
  317.     DWORD   NextJobId;
  318.     DWORD   Reserved;
  319. } JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;
  320.  
  321. #define JOB_CONTROL_PAUSE              1
  322. #define JOB_CONTROL_RESUME             2
  323. #define JOB_CONTROL_CANCEL             3
  324. #define JOB_CONTROL_RESTART            4
  325. #define JOB_CONTROL_DELETE             5
  326. #define JOB_CONTROL_SENT_TO_PRINTER    6
  327. #define JOB_CONTROL_LAST_PAGE_EJECTED  7
  328.  
  329. #define JOB_STATUS_PAUSED               0x00000001
  330. #define JOB_STATUS_ERROR                0x00000002
  331. #define JOB_STATUS_DELETING             0x00000004
  332. #define JOB_STATUS_SPOOLING             0x00000008
  333. #define JOB_STATUS_PRINTING             0x00000010
  334. #define JOB_STATUS_OFFLINE              0x00000020
  335. #define JOB_STATUS_PAPEROUT             0x00000040
  336. #define JOB_STATUS_PRINTED              0x00000080
  337. #define JOB_STATUS_DELETED              0x00000100
  338. #define JOB_STATUS_BLOCKED_DEVQ         0x00000200
  339. #define JOB_STATUS_USER_INTERVENTION    0x00000400
  340. #define JOB_STATUS_RESTART              0x00000800
  341.  
  342. #define JOB_POSITION_UNSPECIFIED       0
  343.  
  344. typedef struct _ADDJOB_INFO_1A {
  345.     LPSTR     Path;
  346.     DWORD   JobId;
  347. } ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
  348. typedef struct _ADDJOB_INFO_1W {
  349.     LPWSTR    Path;
  350.     DWORD   JobId;
  351. } ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
  352. #ifdef UNICODE
  353. typedef ADDJOB_INFO_1W ADDJOB_INFO_1;
  354. typedef PADDJOB_INFO_1W PADDJOB_INFO_1;
  355. typedef LPADDJOB_INFO_1W LPADDJOB_INFO_1;
  356. #else
  357. typedef ADDJOB_INFO_1A ADDJOB_INFO_1;
  358. typedef PADDJOB_INFO_1A PADDJOB_INFO_1;
  359. typedef LPADDJOB_INFO_1A LPADDJOB_INFO_1;
  360. #endif // UNICODE
  361.  
  362. typedef struct _DRIVER_INFO_1A {
  363.     LPSTR     pName;              // QMS 810
  364. } DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
  365. typedef struct _DRIVER_INFO_1W {
  366.     LPWSTR    pName;              // QMS 810
  367. } DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
  368. #ifdef UNICODE
  369. typedef DRIVER_INFO_1W DRIVER_INFO_1;
  370. typedef PDRIVER_INFO_1W PDRIVER_INFO_1;
  371. typedef LPDRIVER_INFO_1W LPDRIVER_INFO_1;
  372. #else
  373. typedef DRIVER_INFO_1A DRIVER_INFO_1;
  374. typedef PDRIVER_INFO_1A PDRIVER_INFO_1;
  375. typedef LPDRIVER_INFO_1A LPDRIVER_INFO_1;
  376. #endif // UNICODE
  377.  
  378. typedef struct _DRIVER_INFO_2A {
  379.     DWORD   cVersion;
  380.     LPSTR     pName;              // QMS 810
  381.     LPSTR     pEnvironment;       // Win32 x86
  382.     LPSTR     pDriverPath;        // c:\drivers\pscript.dll
  383.     LPSTR     pDataFile;          // c:\drivers\QMS810.PPD
  384.     LPSTR     pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  385. } DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
  386. typedef struct _DRIVER_INFO_2W {
  387.     DWORD   cVersion;
  388.     LPWSTR    pName;              // QMS 810
  389.     LPWSTR    pEnvironment;       // Win32 x86
  390.     LPWSTR    pDriverPath;        // c:\drivers\pscript.dll
  391.     LPWSTR    pDataFile;          // c:\drivers\QMS810.PPD
  392.     LPWSTR    pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  393. } DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
  394. #ifdef UNICODE
  395. typedef DRIVER_INFO_2W DRIVER_INFO_2;
  396. typedef PDRIVER_INFO_2W PDRIVER_INFO_2;
  397. typedef LPDRIVER_INFO_2W LPDRIVER_INFO_2;
  398. #else
  399. typedef DRIVER_INFO_2A DRIVER_INFO_2;
  400. typedef PDRIVER_INFO_2A PDRIVER_INFO_2;
  401. typedef LPDRIVER_INFO_2A LPDRIVER_INFO_2;
  402. #endif // UNICODE
  403.  
  404. typedef struct _DRIVER_INFO_3A {
  405.     DWORD   cVersion;
  406.     LPSTR     pName;                    // QMS 810
  407.     LPSTR     pEnvironment;             // Win32 x86
  408.     LPSTR     pDriverPath;              // c:\drivers\pscript.dll
  409.     LPSTR     pDataFile;                // c:\drivers\QMS810.PPD
  410.     LPSTR     pConfigFile;              // c:\drivers\PSCRPTUI.DLL
  411.     LPSTR     pHelpFile;                // c:\drivers\PSCRPTUI.HLP
  412.     LPSTR     pDependentFiles;          // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0
  413.     LPSTR     pMonitorName;             // "PJL monitor"
  414.     LPSTR     pDefaultDataType;         // "EMF"
  415. } DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
  416. typedef struct _DRIVER_INFO_3W {
  417.     DWORD   cVersion;
  418.     LPWSTR    pName;                    // QMS 810
  419.     LPWSTR    pEnvironment;             // Win32 x86
  420.     LPWSTR    pDriverPath;              // c:\drivers\pscript.dll
  421.     LPWSTR    pDataFile;                // c:\drivers\QMS810.PPD
  422.     LPWSTR    pConfigFile;              // c:\drivers\PSCRPTUI.DLL
  423.     LPWSTR    pHelpFile;                // c:\drivers\PSCRPTUI.HLP
  424.     LPWSTR    pDependentFiles;          // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0
  425.     LPWSTR    pMonitorName;             // "PJL monitor"
  426.     LPWSTR    pDefaultDataType;         // "EMF"
  427. } DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
  428. #ifdef UNICODE
  429. typedef DRIVER_INFO_3W DRIVER_INFO_3;
  430. typedef PDRIVER_INFO_3W PDRIVER_INFO_3;
  431. typedef LPDRIVER_INFO_3W LPDRIVER_INFO_3;
  432. #else
  433. typedef DRIVER_INFO_3A DRIVER_INFO_3;
  434. typedef PDRIVER_INFO_3A PDRIVER_INFO_3;
  435. typedef LPDRIVER_INFO_3A LPDRIVER_INFO_3;
  436. #endif // UNICODE
  437.  
  438. typedef struct _DOC_INFO_1A {
  439.     LPSTR     pDocName;
  440.     LPSTR     pOutputFile;
  441.     LPSTR     pDatatype;
  442. } DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
  443. typedef struct _DOC_INFO_1W {
  444.     LPWSTR    pDocName;
  445.     LPWSTR    pOutputFile;
  446.     LPWSTR    pDatatype;
  447. } DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
  448. #ifdef UNICODE
  449. typedef DOC_INFO_1W DOC_INFO_1;
  450. typedef PDOC_INFO_1W PDOC_INFO_1;
  451. typedef LPDOC_INFO_1W LPDOC_INFO_1;
  452. #else
  453. typedef DOC_INFO_1A DOC_INFO_1;
  454. typedef PDOC_INFO_1A PDOC_INFO_1;
  455. typedef LPDOC_INFO_1A LPDOC_INFO_1;
  456. #endif // UNICODE
  457.  
  458. typedef struct _FORM_INFO_1A {
  459.     DWORD   Flags;
  460.     LPSTR     pName;
  461.     SIZEL   Size;
  462.     RECTL   ImageableArea;
  463. } FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
  464. typedef struct _FORM_INFO_1W {
  465.     DWORD   Flags;
  466.     LPWSTR    pName;
  467.     SIZEL   Size;
  468.     RECTL   ImageableArea;
  469. } FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
  470. #ifdef UNICODE
  471. typedef FORM_INFO_1W FORM_INFO_1;
  472. typedef PFORM_INFO_1W PFORM_INFO_1;
  473. typedef LPFORM_INFO_1W LPFORM_INFO_1;
  474. #else
  475. typedef FORM_INFO_1A FORM_INFO_1;
  476. typedef PFORM_INFO_1A PFORM_INFO_1;
  477. typedef LPFORM_INFO_1A LPFORM_INFO_1;
  478. #endif // UNICODE
  479.  
  480. typedef struct _DOC_INFO_2A {
  481.     LPSTR     pDocName;
  482.     LPSTR     pOutputFile;
  483.     LPSTR     pDatatype;
  484.     DWORD   dwMode;
  485.     DWORD   JobId;
  486. } DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;
  487. typedef struct _DOC_INFO_2W {
  488.     LPWSTR    pDocName;
  489.     LPWSTR    pOutputFile;
  490.     LPWSTR    pDatatype;
  491.     DWORD   dwMode;
  492.     DWORD   JobId;
  493. } DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;
  494. #ifdef UNICODE
  495. typedef DOC_INFO_2W DOC_INFO_2;
  496. typedef PDOC_INFO_2W PDOC_INFO_2;
  497. typedef LPDOC_INFO_2W LPDOC_INFO_2;
  498. #else
  499. typedef DOC_INFO_2A DOC_INFO_2;
  500. typedef PDOC_INFO_2A PDOC_INFO_2;
  501. typedef LPDOC_INFO_2A LPDOC_INFO_2;
  502. #endif // UNICODE
  503.  
  504. #define DI_CHANNEL              1    // start direct read/write channel,
  505.  
  506.  
  507. #define DI_READ_SPOOL_JOB       3
  508.  
  509.  
  510. #define FORM_USER       0x00000000
  511. #define FORM_BUILTIN    0x00000001
  512. #define FORM_PRINTER    0x00000002
  513.  
  514. typedef struct _PRINTPROCESSOR_INFO_1A {
  515.     LPSTR     pName;
  516. } PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A;
  517. typedef struct _PRINTPROCESSOR_INFO_1W {
  518.     LPWSTR    pName;
  519. } PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W;
  520. #ifdef UNICODE
  521. typedef PRINTPROCESSOR_INFO_1W PRINTPROCESSOR_INFO_1;
  522. typedef PPRINTPROCESSOR_INFO_1W PPRINTPROCESSOR_INFO_1;
  523. typedef LPPRINTPROCESSOR_INFO_1W LPPRINTPROCESSOR_INFO_1;
  524. #else
  525. typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1;
  526. typedef PPRINTPROCESSOR_INFO_1A PPRINTPROCESSOR_INFO_1;
  527. typedef LPPRINTPROCESSOR_INFO_1A LPPRINTPROCESSOR_INFO_1;
  528. #endif // UNICODE
  529.  
  530. typedef struct _PORT_INFO_1A {
  531.     LPSTR     pName;
  532. } PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
  533. typedef struct _PORT_INFO_1W {
  534.     LPWSTR    pName;
  535. } PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
  536. #ifdef UNICODE
  537. typedef PORT_INFO_1W PORT_INFO_1;
  538. typedef PPORT_INFO_1W PPORT_INFO_1;
  539. typedef LPPORT_INFO_1W LPPORT_INFO_1;
  540. #else
  541. typedef PORT_INFO_1A PORT_INFO_1;
  542. typedef PPORT_INFO_1A PPORT_INFO_1;
  543. typedef LPPORT_INFO_1A LPPORT_INFO_1;
  544. #endif // UNICODE
  545.  
  546. typedef struct _PORT_INFO_2A {
  547.     LPSTR     pPortName;
  548.     LPSTR     pMonitorName;
  549.     LPSTR     pDescription;
  550.     DWORD     fPortType;
  551.     DWORD     Reserved;
  552. } PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;
  553. typedef struct _PORT_INFO_2W {
  554.     LPWSTR    pPortName;
  555.     LPWSTR    pMonitorName;
  556.     LPWSTR    pDescription;
  557.     DWORD     fPortType;
  558.     DWORD     Reserved;
  559. } PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;
  560. #ifdef UNICODE
  561. typedef PORT_INFO_2W PORT_INFO_2;
  562. typedef PPORT_INFO_2W PPORT_INFO_2;
  563. typedef LPPORT_INFO_2W LPPORT_INFO_2;
  564. #else
  565. typedef PORT_INFO_2A PORT_INFO_2;
  566. typedef PPORT_INFO_2A PPORT_INFO_2;
  567. typedef LPPORT_INFO_2A LPPORT_INFO_2;
  568. #endif // UNICODE
  569.  
  570. #define PORT_TYPE_WRITE         0x0001
  571. #define PORT_TYPE_READ          0x0002
  572. #define PORT_TYPE_REDIRECTED    0x0004
  573. #define PORT_TYPE_NET_ATTACHED  0x0008
  574.  
  575. typedef struct _PORT_INFO_3A {
  576.     DWORD   dwStatus;
  577.     LPSTR   pszStatus;
  578.     DWORD   dwSeverity;
  579. } PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;
  580. typedef struct _PORT_INFO_3W {
  581.     DWORD   dwStatus;
  582.     LPWSTR  pszStatus;
  583.     DWORD   dwSeverity;
  584. } PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;
  585. #ifdef UNICODE
  586. typedef PORT_INFO_3W PORT_INFO_3;
  587. typedef PPORT_INFO_3W PPORT_INFO_3;
  588. typedef LPPORT_INFO_3W LPPORT_INFO_3;
  589. #else
  590. typedef PORT_INFO_3A PORT_INFO_3;
  591. typedef PPORT_INFO_3A PPORT_INFO_3;
  592. typedef LPPORT_INFO_3A LPPORT_INFO_3;
  593. #endif // UNICODE
  594.  
  595. #define PORT_STATUS_TYPE_ERROR      1
  596. #define PORT_STATUS_TYPE_WARNING    2
  597. #define PORT_STATUS_TYPE_INFO       3
  598.  
  599. #define     PORT_STATUS_OFFLINE                 1
  600. #define     PORT_STATUS_PAPER_JAM               2
  601. #define     PORT_STATUS_PAPER_OUT               3
  602. #define     PORT_STATUS_OUTPUT_BIN_FULL         4
  603. #define     PORT_STATUS_PAPER_PROBLEM           5
  604. #define     PORT_STATUS_NO_TONER                6
  605. #define     PORT_STATUS_DOOR_OPEN               7
  606. #define     PORT_STATUS_USER_INTERVENTION       8
  607. #define     PORT_STATUS_OUT_OF_MEMORY           9
  608.  
  609. #define     PORT_STATUS_TONER_LOW              10
  610.  
  611. #define     PORT_STATUS_WARMING_UP             11
  612. #define     PORT_STATUS_POWER_SAVE             12
  613.  
  614.  
  615. typedef struct _MONITOR_INFO_1A{
  616.     LPSTR     pName;
  617. } MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
  618. typedef struct _MONITOR_INFO_1W{
  619.     LPWSTR    pName;
  620. } MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
  621. #ifdef UNICODE
  622. typedef MONITOR_INFO_1W MONITOR_INFO_1;
  623. typedef PMONITOR_INFO_1W PMONITOR_INFO_1;
  624. typedef LPMONITOR_INFO_1W LPMONITOR_INFO_1;
  625. #else
  626. typedef MONITOR_INFO_1A MONITOR_INFO_1;
  627. typedef PMONITOR_INFO_1A PMONITOR_INFO_1;
  628. typedef LPMONITOR_INFO_1A LPMONITOR_INFO_1;
  629. #endif // UNICODE
  630.  
  631. typedef struct _MONITOR_INFO_2A{
  632.     LPSTR     pName;
  633.     LPSTR     pEnvironment;
  634.     LPSTR     pDLLName;
  635. } MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
  636. typedef struct _MONITOR_INFO_2W{
  637.     LPWSTR    pName;
  638.     LPWSTR    pEnvironment;
  639.     LPWSTR    pDLLName;
  640. } MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
  641. #ifdef UNICODE
  642. typedef MONITOR_INFO_2W MONITOR_INFO_2;
  643. typedef PMONITOR_INFO_2W PMONITOR_INFO_2;
  644. typedef LPMONITOR_INFO_2W LPMONITOR_INFO_2;
  645. #else
  646. typedef MONITOR_INFO_2A MONITOR_INFO_2;
  647. typedef PMONITOR_INFO_2A PMONITOR_INFO_2;
  648. typedef LPMONITOR_INFO_2A LPMONITOR_INFO_2;
  649. #endif // UNICODE
  650.  
  651. typedef struct _DATATYPES_INFO_1A{
  652.     LPSTR     pName;
  653. } DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
  654. typedef struct _DATATYPES_INFO_1W{
  655.     LPWSTR    pName;
  656. } DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
  657. #ifdef UNICODE
  658. typedef DATATYPES_INFO_1W DATATYPES_INFO_1;
  659. typedef PDATATYPES_INFO_1W PDATATYPES_INFO_1;
  660. typedef LPDATATYPES_INFO_1W LPDATATYPES_INFO_1;
  661. #else
  662. typedef DATATYPES_INFO_1A DATATYPES_INFO_1;
  663. typedef PDATATYPES_INFO_1A PDATATYPES_INFO_1;
  664. typedef LPDATATYPES_INFO_1A LPDATATYPES_INFO_1;
  665. #endif // UNICODE
  666.  
  667. typedef struct _PRINTER_DEFAULTSA{
  668.     LPSTR         pDatatype;
  669.     LPDEVMODEA pDevMode;
  670.     ACCESS_MASK DesiredAccess;
  671. } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
  672. typedef struct _PRINTER_DEFAULTSW{
  673.     LPWSTR        pDatatype;
  674.     LPDEVMODEW pDevMode;
  675.     ACCESS_MASK DesiredAccess;
  676. } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
  677. #ifdef UNICODE
  678. typedef PRINTER_DEFAULTSW PRINTER_DEFAULTS;
  679. typedef PPRINTER_DEFAULTSW PPRINTER_DEFAULTS;
  680. typedef LPPRINTER_DEFAULTSW LPPRINTER_DEFAULTS;
  681. #else
  682. typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS;
  683. typedef PPRINTER_DEFAULTSA PPRINTER_DEFAULTS;
  684. typedef LPPRINTER_DEFAULTSA LPPRINTER_DEFAULTS;
  685. #endif // UNICODE
  686.  
  687. BOOL
  688. WINAPI
  689. EnumPrintersA(
  690.     DWORD   Flags,
  691.     LPSTR   Name,
  692.     DWORD   Level,
  693.     LPBYTE  pPrinterEnum,
  694.     DWORD   cbBuf,
  695.     LPDWORD pcbNeeded,
  696.     LPDWORD pcReturned
  697. );
  698. BOOL
  699. WINAPI
  700. EnumPrintersW(
  701.     DWORD   Flags,
  702.     LPWSTR   Name,
  703.     DWORD   Level,
  704.     LPBYTE  pPrinterEnum,
  705.     DWORD   cbBuf,
  706.     LPDWORD pcbNeeded,
  707.     LPDWORD pcReturned
  708. );
  709. #ifdef UNICODE
  710. #define EnumPrinters  EnumPrintersW
  711. #else
  712. #define EnumPrinters  EnumPrintersA
  713. #endif // !UNICODE
  714.  
  715. #define PRINTER_ENUM_DEFAULT     0x00000001
  716. #define PRINTER_ENUM_LOCAL       0x00000002
  717. #define PRINTER_ENUM_CONNECTIONS 0x00000004
  718. #define PRINTER_ENUM_FAVORITE    0x00000004
  719. #define PRINTER_ENUM_NAME        0x00000008
  720. #define PRINTER_ENUM_REMOTE      0x00000010
  721. #define PRINTER_ENUM_SHARED      0x00000020
  722. #define PRINTER_ENUM_NETWORK     0x00000040
  723.  
  724. #define PRINTER_ENUM_EXPAND      0x00004000
  725. #define PRINTER_ENUM_CONTAINER   0x00008000
  726.  
  727. #define PRINTER_ENUM_ICONMASK    0x00ff0000
  728. #define PRINTER_ENUM_ICON1       0x00010000
  729. #define PRINTER_ENUM_ICON2       0x00020000
  730. #define PRINTER_ENUM_ICON3       0x00040000
  731. #define PRINTER_ENUM_ICON4       0x00080000
  732. #define PRINTER_ENUM_ICON5       0x00100000
  733. #define PRINTER_ENUM_ICON6       0x00200000
  734. #define PRINTER_ENUM_ICON7       0x00400000
  735. #define PRINTER_ENUM_ICON8       0x00800000
  736.  
  737. BOOL
  738. WINAPI
  739. OpenPrinterA(
  740.    LPSTR    pPrinterName,
  741.    LPHANDLE phPrinter,
  742.    LPPRINTER_DEFAULTSA pDefault
  743. );
  744. BOOL
  745. WINAPI
  746. OpenPrinterW(
  747.    LPWSTR    pPrinterName,
  748.    LPHANDLE phPrinter,
  749.    LPPRINTER_DEFAULTSW pDefault
  750. );
  751. #ifdef UNICODE
  752. #define OpenPrinter  OpenPrinterW
  753. #else
  754. #define OpenPrinter  OpenPrinterA
  755. #endif // !UNICODE
  756.  
  757. BOOL
  758. WINAPI
  759. ResetPrinterA(
  760.    HANDLE   hPrinter,
  761.    LPPRINTER_DEFAULTSA pDefault
  762. );
  763. BOOL
  764. WINAPI
  765. ResetPrinterW(
  766.    HANDLE   hPrinter,
  767.    LPPRINTER_DEFAULTSW pDefault
  768. );
  769. #ifdef UNICODE
  770. #define ResetPrinter  ResetPrinterW
  771. #else
  772. #define ResetPrinter  ResetPrinterA
  773. #endif // !UNICODE
  774.  
  775. BOOL
  776. WINAPI
  777. SetJobA(
  778.     HANDLE  hPrinter,
  779.     DWORD   JobId,
  780.     DWORD   Level,
  781.     LPBYTE  pJob,
  782.     DWORD   Command
  783. );
  784. BOOL
  785. WINAPI
  786. SetJobW(
  787.     HANDLE  hPrinter,
  788.     DWORD   JobId,
  789.     DWORD   Level,
  790.     LPBYTE  pJob,
  791.     DWORD   Command
  792. );
  793. #ifdef UNICODE
  794. #define SetJob  SetJobW
  795. #else
  796. #define SetJob  SetJobA
  797. #endif // !UNICODE
  798.  
  799. BOOL
  800. WINAPI
  801. GetJobA(
  802.    HANDLE   hPrinter,
  803.    DWORD    JobId,
  804.    DWORD    Level,
  805.    LPBYTE   pJob,
  806.    DWORD    cbBuf,
  807.    LPDWORD  pcbNeeded
  808. );
  809. BOOL
  810. WINAPI
  811. GetJobW(
  812.    HANDLE   hPrinter,
  813.    DWORD    JobId,
  814.    DWORD    Level,
  815.    LPBYTE   pJob,
  816.    DWORD    cbBuf,
  817.    LPDWORD  pcbNeeded
  818. );
  819. #ifdef UNICODE
  820. #define GetJob  GetJobW
  821. #else
  822. #define GetJob  GetJobA
  823. #endif // !UNICODE
  824.  
  825. BOOL
  826. WINAPI
  827. EnumJobsA(
  828.     HANDLE  hPrinter,
  829.     DWORD   FirstJob,
  830.     DWORD   NoJobs,
  831.     DWORD   Level,
  832.     LPBYTE  pJob,
  833.     DWORD   cbBuf,
  834.     LPDWORD pcbNeeded,
  835.     LPDWORD pcReturned
  836. );
  837. BOOL
  838. WINAPI
  839. EnumJobsW(
  840.     HANDLE  hPrinter,
  841.     DWORD   FirstJob,
  842.     DWORD   NoJobs,
  843.     DWORD   Level,
  844.     LPBYTE  pJob,
  845.     DWORD   cbBuf,
  846.     LPDWORD pcbNeeded,
  847.     LPDWORD pcReturned
  848. );
  849. #ifdef UNICODE
  850. #define EnumJobs  EnumJobsW
  851. #else
  852. #define EnumJobs  EnumJobsA
  853. #endif // !UNICODE
  854.  
  855. HANDLE
  856. WINAPI
  857. AddPrinterA(
  858.     LPSTR   pName,
  859.     DWORD   Level,
  860.     LPBYTE  pPrinter
  861. );
  862. HANDLE
  863. WINAPI
  864. AddPrinterW(
  865.     LPWSTR   pName,
  866.     DWORD   Level,
  867.     LPBYTE  pPrinter
  868. );
  869. #ifdef UNICODE
  870. #define AddPrinter  AddPrinterW
  871. #else
  872. #define AddPrinter  AddPrinterA
  873. #endif // !UNICODE
  874.  
  875. BOOL
  876. WINAPI
  877. DeletePrinter(
  878.    HANDLE   hPrinter
  879. );
  880.  
  881. BOOL
  882. WINAPI
  883. SetPrinterA(
  884.     HANDLE  hPrinter,
  885.     DWORD   Level,
  886.     LPBYTE  pPrinter,
  887.     DWORD   Command
  888. );
  889. BOOL
  890. WINAPI
  891. SetPrinterW(
  892.     HANDLE  hPrinter,
  893.     DWORD   Level,
  894.     LPBYTE  pPrinter,
  895.     DWORD   Command
  896. );
  897. #ifdef UNICODE
  898. #define SetPrinter  SetPrinterW
  899. #else
  900. #define SetPrinter  SetPrinterA
  901. #endif // !UNICODE
  902.  
  903. BOOL
  904. WINAPI
  905. GetPrinterA(
  906.     HANDLE  hPrinter,
  907.     DWORD   Level,
  908.     LPBYTE  pPrinter,
  909.     DWORD   cbBuf,
  910.     LPDWORD pcbNeeded
  911. );
  912. BOOL
  913. WINAPI
  914. GetPrinterW(
  915.     HANDLE  hPrinter,
  916.     DWORD   Level,
  917.     LPBYTE  pPrinter,
  918.     DWORD   cbBuf,
  919.     LPDWORD pcbNeeded
  920. );
  921. #ifdef UNICODE
  922. #define GetPrinter  GetPrinterW
  923. #else
  924. #define GetPrinter  GetPrinterA
  925. #endif // !UNICODE
  926.  
  927. BOOL
  928. WINAPI
  929. AddPrinterDriverA(
  930.     LPSTR   pName,
  931.     DWORD   Level,
  932.     LPBYTE  pDriverInfo
  933. );
  934. BOOL
  935. WINAPI
  936. AddPrinterDriverW(
  937.     LPWSTR   pName,
  938.     DWORD   Level,
  939.     LPBYTE  pDriverInfo
  940. );
  941. #ifdef UNICODE
  942. #define AddPrinterDriver  AddPrinterDriverW
  943. #else
  944. #define AddPrinterDriver  AddPrinterDriverA
  945. #endif // !UNICODE
  946.  
  947. BOOL
  948. WINAPI
  949. EnumPrinterDriversA(
  950.     LPSTR   pName,
  951.     LPSTR   pEnvironment,
  952.     DWORD   Level,
  953.     LPBYTE  pDriverInfo,
  954.     DWORD   cbBuf,
  955.     LPDWORD pcbNeeded,
  956.     LPDWORD pcReturned
  957. );
  958. BOOL
  959. WINAPI
  960. EnumPrinterDriversW(
  961.     LPWSTR   pName,
  962.     LPWSTR   pEnvironment,
  963.     DWORD   Level,
  964.     LPBYTE  pDriverInfo,
  965.     DWORD   cbBuf,
  966.     LPDWORD pcbNeeded,
  967.     LPDWORD pcReturned
  968. );
  969. #ifdef UNICODE
  970. #define EnumPrinterDrivers  EnumPrinterDriversW
  971. #else
  972. #define EnumPrinterDrivers  EnumPrinterDriversA
  973. #endif // !UNICODE
  974.  
  975. BOOL
  976. WINAPI
  977. GetPrinterDriverA(
  978.     HANDLE  hPrinter,
  979.     LPSTR   pEnvironment,
  980.     DWORD   Level,
  981.     LPBYTE  pDriverInfo,
  982.     DWORD   cbBuf,
  983.     LPDWORD pcbNeeded
  984. );
  985. BOOL
  986. WINAPI
  987. GetPrinterDriverW(
  988.     HANDLE  hPrinter,
  989.     LPWSTR   pEnvironment,
  990.     DWORD   Level,
  991.     LPBYTE  pDriverInfo,
  992.     DWORD   cbBuf,
  993.     LPDWORD pcbNeeded
  994. );
  995. #ifdef UNICODE
  996. #define GetPrinterDriver  GetPrinterDriverW
  997. #else
  998. #define GetPrinterDriver  GetPrinterDriverA
  999. #endif // !UNICODE
  1000.  
  1001. BOOL
  1002. WINAPI
  1003. GetPrinterDriverDirectoryA(
  1004.     LPSTR   pName,
  1005.     LPSTR   pEnvironment,
  1006.     DWORD   Level,
  1007.     LPBYTE  pDriverDirectory,
  1008.     DWORD   cbBuf,
  1009.     LPDWORD pcbNeeded
  1010. );
  1011. BOOL
  1012. WINAPI
  1013. GetPrinterDriverDirectoryW(
  1014.     LPWSTR   pName,
  1015.     LPWSTR   pEnvironment,
  1016.     DWORD   Level,
  1017.     LPBYTE  pDriverDirectory,
  1018.     DWORD   cbBuf,
  1019.     LPDWORD pcbNeeded
  1020. );
  1021. #ifdef UNICODE
  1022. #define GetPrinterDriverDirectory  GetPrinterDriverDirectoryW
  1023. #else
  1024. #define GetPrinterDriverDirectory  GetPrinterDriverDirectoryA
  1025. #endif // !UNICODE
  1026.  
  1027. BOOL
  1028. WINAPI
  1029. DeletePrinterDriverA(
  1030.    LPSTR    pName,
  1031.    LPSTR    pEnvironment,
  1032.    LPSTR    pDriverName
  1033. );
  1034. BOOL
  1035. WINAPI
  1036. DeletePrinterDriverW(
  1037.    LPWSTR    pName,
  1038.    LPWSTR    pEnvironment,
  1039.    LPWSTR    pDriverName
  1040. );
  1041. #ifdef UNICODE
  1042. #define DeletePrinterDriver  DeletePrinterDriverW
  1043. #else
  1044. #define DeletePrinterDriver  DeletePrinterDriverA
  1045. #endif // !UNICODE
  1046.  
  1047. BOOL
  1048. WINAPI
  1049. AddPrintProcessorA(
  1050.     LPSTR   pName,
  1051.     LPSTR   pEnvironment,
  1052.     LPSTR   pPathName,
  1053.     LPSTR   pPrintProcessorName
  1054. );
  1055. BOOL
  1056. WINAPI
  1057. AddPrintProcessorW(
  1058.     LPWSTR   pName,
  1059.     LPWSTR   pEnvironment,
  1060.     LPWSTR   pPathName,
  1061.     LPWSTR   pPrintProcessorName
  1062. );
  1063. #ifdef UNICODE
  1064. #define AddPrintProcessor  AddPrintProcessorW
  1065. #else
  1066. #define AddPrintProcessor  AddPrintProcessorA
  1067. #endif // !UNICODE
  1068.  
  1069. BOOL
  1070. WINAPI
  1071. EnumPrintProcessorsA(
  1072.     LPSTR   pName,
  1073.     LPSTR   pEnvironment,
  1074.     DWORD   Level,
  1075.     LPBYTE  pPrintProcessorInfo,
  1076.     DWORD   cbBuf,
  1077.     LPDWORD pcbNeeded,
  1078.     LPDWORD pcReturned
  1079. );
  1080. BOOL
  1081. WINAPI
  1082. EnumPrintProcessorsW(
  1083.     LPWSTR   pName,
  1084.     LPWSTR   pEnvironment,
  1085.     DWORD   Level,
  1086.     LPBYTE  pPrintProcessorInfo,
  1087.     DWORD   cbBuf,
  1088.     LPDWORD pcbNeeded,
  1089.     LPDWORD pcReturned
  1090. );
  1091. #ifdef UNICODE
  1092. #define EnumPrintProcessors  EnumPrintProcessorsW
  1093. #else
  1094. #define EnumPrintProcessors  EnumPrintProcessorsA
  1095. #endif // !UNICODE
  1096.  
  1097.  
  1098.  
  1099. BOOL
  1100. WINAPI
  1101. GetPrintProcessorDirectoryA(
  1102.     LPSTR   pName,
  1103.     LPSTR   pEnvironment,
  1104.     DWORD   Level,
  1105.     LPBYTE  pPrintProcessorInfo,
  1106.     DWORD   cbBuf,
  1107.     LPDWORD pcbNeeded
  1108. );
  1109. BOOL
  1110. WINAPI
  1111. GetPrintProcessorDirectoryW(
  1112.     LPWSTR   pName,
  1113.     LPWSTR   pEnvironment,
  1114.     DWORD   Level,
  1115.     LPBYTE  pPrintProcessorInfo,
  1116.     DWORD   cbBuf,
  1117.     LPDWORD pcbNeeded
  1118. );
  1119. #ifdef UNICODE
  1120. #define GetPrintProcessorDirectory  GetPrintProcessorDirectoryW
  1121. #else
  1122. #define GetPrintProcessorDirectory  GetPrintProcessorDirectoryA
  1123. #endif // !UNICODE
  1124.  
  1125. BOOL
  1126. WINAPI
  1127. EnumPrintProcessorDatatypesA(
  1128.     LPSTR   pName,
  1129.     LPSTR   pPrintProcessorName,
  1130.     DWORD   Level,
  1131.     LPBYTE  pDatatypes,
  1132.     DWORD   cbBuf,
  1133.     LPDWORD pcbNeeded,
  1134.     LPDWORD pcReturned
  1135. );
  1136. BOOL
  1137. WINAPI
  1138. EnumPrintProcessorDatatypesW(
  1139.     LPWSTR   pName,
  1140.     LPWSTR   pPrintProcessorName,
  1141.     DWORD   Level,
  1142.     LPBYTE  pDatatypes,
  1143.     DWORD   cbBuf,
  1144.     LPDWORD pcbNeeded,
  1145.     LPDWORD pcReturned
  1146. );
  1147. #ifdef UNICODE
  1148. #define EnumPrintProcessorDatatypes  EnumPrintProcessorDatatypesW
  1149. #else
  1150. #define EnumPrintProcessorDatatypes  EnumPrintProcessorDatatypesA
  1151. #endif // !UNICODE
  1152.  
  1153. BOOL
  1154. WINAPI
  1155. DeletePrintProcessorA(
  1156.     LPSTR   pName,
  1157.     LPSTR   pEnvironment,
  1158.     LPSTR   pPrintProcessorName
  1159. );
  1160. BOOL
  1161. WINAPI
  1162. DeletePrintProcessorW(
  1163.     LPWSTR   pName,
  1164.     LPWSTR   pEnvironment,
  1165.     LPWSTR   pPrintProcessorName
  1166. );
  1167. #ifdef UNICODE
  1168. #define DeletePrintProcessor  DeletePrintProcessorW
  1169. #else
  1170. #define DeletePrintProcessor  DeletePrintProcessorA
  1171. #endif // !UNICODE
  1172.  
  1173. DWORD
  1174. WINAPI
  1175. StartDocPrinterA(
  1176.     HANDLE  hPrinter,
  1177.     DWORD   Level,
  1178.     LPBYTE  pDocInfo
  1179. );
  1180. DWORD
  1181. WINAPI
  1182. StartDocPrinterW(
  1183.     HANDLE  hPrinter,
  1184.     DWORD   Level,
  1185.     LPBYTE  pDocInfo
  1186. );
  1187. #ifdef UNICODE
  1188. #define StartDocPrinter  StartDocPrinterW
  1189. #else
  1190. #define StartDocPrinter  StartDocPrinterA
  1191. #endif // !UNICODE
  1192.  
  1193. BOOL
  1194. WINAPI
  1195. StartPagePrinter(
  1196.     HANDLE  hPrinter
  1197. );
  1198.  
  1199. BOOL
  1200. WINAPI
  1201. WritePrinter(
  1202.     HANDLE  hPrinter,
  1203.     LPVOID  pBuf,
  1204.     DWORD   cbBuf,
  1205.     LPDWORD pcWritten
  1206. );
  1207.  
  1208. BOOL
  1209. WINAPI
  1210. EndPagePrinter(
  1211.    HANDLE   hPrinter
  1212. );
  1213.  
  1214. BOOL
  1215. WINAPI
  1216. AbortPrinter(
  1217.    HANDLE   hPrinter
  1218. );
  1219.  
  1220. BOOL
  1221. WINAPI
  1222. ReadPrinter(
  1223.     HANDLE  hPrinter,
  1224.     LPVOID  pBuf,
  1225.     DWORD   cbBuf,
  1226.     LPDWORD pNoBytesRead
  1227. );
  1228.  
  1229. BOOL
  1230. WINAPI
  1231. EndDocPrinter(
  1232.    HANDLE   hPrinter
  1233. );
  1234.  
  1235. BOOL
  1236. WINAPI
  1237. AddJobA(
  1238.     HANDLE  hPrinter,
  1239.     DWORD   Level,
  1240.     LPBYTE  pData,
  1241.     DWORD   cbBuf,
  1242.     LPDWORD pcbNeeded
  1243. );
  1244. BOOL
  1245. WINAPI
  1246. AddJobW(
  1247.     HANDLE  hPrinter,
  1248.     DWORD   Level,
  1249.     LPBYTE  pData,
  1250.     DWORD   cbBuf,
  1251.     LPDWORD pcbNeeded
  1252. );
  1253. #ifdef UNICODE
  1254. #define AddJob  AddJobW
  1255. #else
  1256. #define AddJob  AddJobA
  1257. #endif // !UNICODE
  1258.  
  1259. BOOL
  1260. WINAPI
  1261. ScheduleJob(
  1262.     HANDLE  hPrinter,
  1263.     DWORD   JobId
  1264. );
  1265.  
  1266. BOOL
  1267. WINAPI
  1268. PrinterProperties(
  1269.     HWND    hWnd,
  1270.     HANDLE  hPrinter
  1271. );
  1272.  
  1273. LONG
  1274. WINAPI
  1275. DocumentPropertiesA(
  1276.     HWND      hWnd,
  1277.     HANDLE    hPrinter,
  1278.     LPSTR   pDeviceName,
  1279.     PDEVMODEA pDevModeOutput,
  1280.     PDEVMODEA pDevModeInput,
  1281.     DWORD     fMode
  1282. );
  1283. LONG
  1284. WINAPI
  1285. DocumentPropertiesW(
  1286.     HWND      hWnd,
  1287.     HANDLE    hPrinter,
  1288.     LPWSTR   pDeviceName,
  1289.     PDEVMODEW pDevModeOutput,
  1290.     PDEVMODEW pDevModeInput,
  1291.     DWORD     fMode
  1292. );
  1293. #ifdef UNICODE
  1294. #define DocumentProperties  DocumentPropertiesW
  1295. #else
  1296. #define DocumentProperties  DocumentPropertiesA
  1297. #endif // !UNICODE
  1298.  
  1299. LONG
  1300. WINAPI
  1301. AdvancedDocumentPropertiesA(
  1302.     HWND    hWnd,
  1303.     HANDLE  hPrinter,
  1304.     LPSTR   pDeviceName,
  1305.     PDEVMODEA pDevModeOutput,
  1306.     PDEVMODEA pDevModeInput
  1307. );
  1308. LONG
  1309. WINAPI
  1310. AdvancedDocumentPropertiesW(
  1311.     HWND    hWnd,
  1312.     HANDLE  hPrinter,
  1313.     LPWSTR   pDeviceName,
  1314.     PDEVMODEW pDevModeOutput,
  1315.     PDEVMODEW pDevModeInput
  1316. );
  1317. #ifdef UNICODE
  1318. #define AdvancedDocumentProperties  AdvancedDocumentPropertiesW
  1319. #else
  1320. #define AdvancedDocumentProperties  AdvancedDocumentPropertiesA
  1321. #endif // !UNICODE
  1322.  
  1323.  
  1324.  
  1325. DWORD
  1326. WINAPI
  1327. GetPrinterDataA(
  1328.     HANDLE   hPrinter,
  1329.     LPSTR  pValueName,
  1330.     LPDWORD  pType,
  1331.     LPBYTE   pData,
  1332.     DWORD    nSize,
  1333.     LPDWORD  pcbNeeded
  1334. );
  1335. DWORD
  1336. WINAPI
  1337. GetPrinterDataW(
  1338.     HANDLE   hPrinter,
  1339.     LPWSTR  pValueName,
  1340.     LPDWORD  pType,
  1341.     LPBYTE   pData,
  1342.     DWORD    nSize,
  1343.     LPDWORD  pcbNeeded
  1344. );
  1345. #ifdef UNICODE
  1346. #define GetPrinterData  GetPrinterDataW
  1347. #else
  1348. #define GetPrinterData  GetPrinterDataA
  1349. #endif // !UNICODE
  1350.  
  1351. DWORD
  1352. WINAPI
  1353. EnumPrinterDataA(
  1354.     HANDLE   hPrinter,
  1355.     DWORD    dwIndex,
  1356.     LPSTR  pValueName,
  1357.     DWORD    cbValueName,
  1358.     LPDWORD  pcbValueName,
  1359.     LPDWORD  pType,
  1360.     LPBYTE   pData,
  1361.     DWORD    cbData,
  1362.     LPDWORD  pcbData
  1363. );
  1364. DWORD
  1365. WINAPI
  1366. EnumPrinterDataW(
  1367.     HANDLE   hPrinter,
  1368.     DWORD    dwIndex,
  1369.     LPWSTR  pValueName,
  1370.     DWORD    cbValueName,
  1371.     LPDWORD  pcbValueName,
  1372.     LPDWORD  pType,
  1373.     LPBYTE   pData,
  1374.     DWORD    cbData,
  1375.     LPDWORD  pcbData
  1376. );
  1377. #ifdef UNICODE
  1378. #define EnumPrinterData  EnumPrinterDataW
  1379. #else
  1380. #define EnumPrinterData  EnumPrinterDataA
  1381. #endif // !UNICODE
  1382.  
  1383.  
  1384. DWORD
  1385. WINAPI
  1386. SetPrinterDataA(
  1387.     HANDLE  hPrinter,
  1388.     LPSTR   pValueName,
  1389.     DWORD   Type,
  1390.     LPBYTE  pData,
  1391.     DWORD   cbData
  1392. );
  1393. DWORD
  1394. WINAPI
  1395. SetPrinterDataW(
  1396.     HANDLE  hPrinter,
  1397.     LPWSTR   pValueName,
  1398.     DWORD   Type,
  1399.     LPBYTE  pData,
  1400.     DWORD   cbData
  1401. );
  1402. #ifdef UNICODE
  1403. #define SetPrinterData  SetPrinterDataW
  1404. #else
  1405. #define SetPrinterData  SetPrinterDataA
  1406. #endif // !UNICODE
  1407.  
  1408.  
  1409. DWORD
  1410. WINAPI
  1411. DeletePrinterDataA(
  1412.     HANDLE  hPrinter,
  1413.     LPSTR pValueName
  1414. );
  1415. DWORD
  1416. WINAPI
  1417. DeletePrinterDataW(
  1418.     HANDLE  hPrinter,
  1419.     LPWSTR pValueName
  1420. );
  1421. #ifdef UNICODE
  1422. #define DeletePrinterData  DeletePrinterDataW
  1423. #else
  1424. #define DeletePrinterData  DeletePrinterDataA
  1425. #endif // !UNICODE
  1426.  
  1427. #define PRINTER_NOTIFY_TYPE 0x00
  1428. #define JOB_NOTIFY_TYPE     0x01
  1429.  
  1430. #define PRINTER_NOTIFY_FIELD_SERVER_NAME             0x00
  1431. #define PRINTER_NOTIFY_FIELD_PRINTER_NAME            0x01
  1432. #define PRINTER_NOTIFY_FIELD_SHARE_NAME              0x02
  1433. #define PRINTER_NOTIFY_FIELD_PORT_NAME               0x03
  1434. #define PRINTER_NOTIFY_FIELD_DRIVER_NAME             0x04
  1435. #define PRINTER_NOTIFY_FIELD_COMMENT                 0x05
  1436. #define PRINTER_NOTIFY_FIELD_LOCATION                0x06
  1437. #define PRINTER_NOTIFY_FIELD_DEVMODE                 0x07
  1438. #define PRINTER_NOTIFY_FIELD_SEPFILE                 0x08
  1439. #define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR         0x09
  1440. #define PRINTER_NOTIFY_FIELD_PARAMETERS              0x0A
  1441. #define PRINTER_NOTIFY_FIELD_DATATYPE                0x0B
  1442. #define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR     0x0C
  1443. #define PRINTER_NOTIFY_FIELD_ATTRIBUTES              0x0D
  1444. #define PRINTER_NOTIFY_FIELD_PRIORITY                0x0E
  1445. #define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY        0x0F
  1446. #define PRINTER_NOTIFY_FIELD_START_TIME              0x10
  1447. #define PRINTER_NOTIFY_FIELD_UNTIL_TIME              0x11
  1448. #define PRINTER_NOTIFY_FIELD_STATUS                  0x12
  1449. #define PRINTER_NOTIFY_FIELD_STATUS_STRING           0x13
  1450. #define PRINTER_NOTIFY_FIELD_CJOBS                   0x14
  1451. #define PRINTER_NOTIFY_FIELD_AVERAGE_PPM             0x15
  1452. #define PRINTER_NOTIFY_FIELD_TOTAL_PAGES             0x16
  1453. #define PRINTER_NOTIFY_FIELD_PAGES_PRINTED           0x17
  1454. #define PRINTER_NOTIFY_FIELD_TOTAL_BYTES             0x18
  1455. #define PRINTER_NOTIFY_FIELD_BYTES_PRINTED           0x19
  1456.  
  1457. #define JOB_NOTIFY_FIELD_PRINTER_NAME                0x00
  1458. #define JOB_NOTIFY_FIELD_MACHINE_NAME                0x01
  1459. #define JOB_NOTIFY_FIELD_PORT_NAME                   0x02
  1460. #define JOB_NOTIFY_FIELD_USER_NAME                   0x03
  1461. #define JOB_NOTIFY_FIELD_NOTIFY_NAME                 0x04
  1462. #define JOB_NOTIFY_FIELD_DATATYPE                    0x05
  1463. #define JOB_NOTIFY_FIELD_PRINT_PROCESSOR             0x06
  1464. #define JOB_NOTIFY_FIELD_PARAMETERS                  0x07
  1465. #define JOB_NOTIFY_FIELD_DRIVER_NAME                 0x08
  1466. #define JOB_NOTIFY_FIELD_DEVMODE                     0x09
  1467. #define JOB_NOTIFY_FIELD_STATUS                      0x0A
  1468. #define JOB_NOTIFY_FIELD_STATUS_STRING               0x0B
  1469. #define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR         0x0C
  1470. #define JOB_NOTIFY_FIELD_DOCUMENT                    0x0D
  1471. #define JOB_NOTIFY_FIELD_PRIORITY                    0x0E
  1472. #define JOB_NOTIFY_FIELD_POSITION                    0x0F
  1473. #define JOB_NOTIFY_FIELD_SUBMITTED                   0x10
  1474. #define JOB_NOTIFY_FIELD_START_TIME                  0x11
  1475. #define JOB_NOTIFY_FIELD_UNTIL_TIME                  0x12
  1476. #define JOB_NOTIFY_FIELD_TIME                        0x13
  1477. #define JOB_NOTIFY_FIELD_TOTAL_PAGES                 0x14
  1478. #define JOB_NOTIFY_FIELD_PAGES_PRINTED               0x15
  1479. #define JOB_NOTIFY_FIELD_TOTAL_BYTES                 0x16
  1480. #define JOB_NOTIFY_FIELD_BYTES_PRINTED               0x17
  1481.  
  1482.  
  1483. typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
  1484.     WORD Type;
  1485.     WORD Reserved0;
  1486.     DWORD Reserved1;
  1487.     DWORD Reserved2;
  1488.     DWORD Count;
  1489.     PWORD pFields;
  1490. } PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE;
  1491.  
  1492.  
  1493. #define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01
  1494.  
  1495. typedef struct _PRINTER_NOTIFY_OPTIONS {
  1496.     DWORD Version;
  1497.     DWORD Flags;
  1498.     DWORD Count;
  1499.     PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
  1500. } PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;
  1501.  
  1502.  
  1503.  
  1504. #define PRINTER_NOTIFY_INFO_DISCARDED       0x01
  1505.  
  1506. typedef struct _PRINTER_NOTIFY_INFO_DATA {
  1507.     WORD Type;
  1508.     WORD Field;
  1509.     DWORD Reserved;
  1510.     DWORD Id;
  1511.     union {
  1512.         DWORD adwData[2];
  1513.         struct {
  1514.             DWORD  cbBuf;
  1515.             LPVOID pBuf;
  1516.         } Data;
  1517.     } NotifyData;
  1518. } PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA;
  1519.  
  1520. typedef struct _PRINTER_NOTIFY_INFO {
  1521.     DWORD Version;
  1522.     DWORD Flags;
  1523.     DWORD Count;
  1524.     PRINTER_NOTIFY_INFO_DATA aData[1];
  1525. } PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;
  1526.  
  1527. DWORD
  1528. WINAPI
  1529. WaitForPrinterChange(
  1530.     HANDLE  hPrinter,
  1531.     DWORD   Flags
  1532. );
  1533.  
  1534. HANDLE
  1535. WINAPI
  1536. FindFirstPrinterChangeNotification(
  1537.     HANDLE  hPrinter,
  1538.     DWORD   fdwFlags,
  1539.     DWORD   fdwOptions,
  1540.     LPVOID  pPrinterNotifyOptions
  1541. );
  1542.  
  1543.  
  1544. BOOL
  1545. WINAPI
  1546. FindNextPrinterChangeNotification(
  1547.     HANDLE hChange,
  1548.     PDWORD pdwChange,
  1549.     LPVOID pvReserved,
  1550.     LPVOID *ppPrinterNotifyInfo
  1551. );
  1552.  
  1553. BOOL
  1554. WINAPI
  1555. FreePrinterNotifyInfo(
  1556.     PPRINTER_NOTIFY_INFO pPrinterNotifyInfo
  1557. );
  1558.  
  1559. BOOL
  1560. WINAPI
  1561. FindClosePrinterChangeNotification(
  1562.     HANDLE hChange
  1563. );
  1564.  
  1565. #define PRINTER_CHANGE_ADD_PRINTER              0x00000001
  1566. #define PRINTER_CHANGE_SET_PRINTER              0x00000002
  1567. #define PRINTER_CHANGE_DELETE_PRINTER           0x00000004
  1568. #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER    0x00000008
  1569. #define PRINTER_CHANGE_PRINTER                  0x000000FF
  1570. #define PRINTER_CHANGE_ADD_JOB                  0x00000100
  1571. #define PRINTER_CHANGE_SET_JOB                  0x00000200
  1572. #define PRINTER_CHANGE_DELETE_JOB               0x00000400
  1573. #define PRINTER_CHANGE_WRITE_JOB                0x00000800
  1574. #define PRINTER_CHANGE_JOB                      0x0000FF00
  1575. #define PRINTER_CHANGE_ADD_FORM                 0x00010000
  1576. #define PRINTER_CHANGE_SET_FORM                 0x00020000
  1577. #define PRINTER_CHANGE_DELETE_FORM              0x00040000
  1578. #define PRINTER_CHANGE_FORM                     0x00070000
  1579. #define PRINTER_CHANGE_ADD_PORT                 0x00100000
  1580. #define PRINTER_CHANGE_CONFIGURE_PORT           0x00200000
  1581. #define PRINTER_CHANGE_DELETE_PORT              0x00400000
  1582. #define PRINTER_CHANGE_PORT                     0x00700000
  1583. #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR      0x01000000
  1584. #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR   0x04000000
  1585. #define PRINTER_CHANGE_PRINT_PROCESSOR          0x07000000
  1586. #define PRINTER_CHANGE_ADD_PRINTER_DRIVER       0x10000000
  1587. #define PRINTER_CHANGE_SET_PRINTER_DRIVER       0x20000000
  1588. #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER    0x40000000
  1589. #define PRINTER_CHANGE_PRINTER_DRIVER           0x70000000
  1590. #define PRINTER_CHANGE_TIMEOUT                  0x80000000
  1591. #define PRINTER_CHANGE_ALL                      0x7777FFFF
  1592.  
  1593. DWORD
  1594. WINAPI
  1595. PrinterMessageBoxA(
  1596.     HANDLE  hPrinter,
  1597.     DWORD   Error,
  1598.     HWND    hWnd,
  1599.     LPSTR   pText,
  1600.     LPSTR   pCaption,
  1601.     DWORD   dwType
  1602. );
  1603. DWORD
  1604. WINAPI
  1605. PrinterMessageBoxW(
  1606.     HANDLE  hPrinter,
  1607.     DWORD   Error,
  1608.     HWND    hWnd,
  1609.     LPWSTR   pText,
  1610.     LPWSTR   pCaption,
  1611.     DWORD   dwType
  1612. );
  1613. #ifdef UNICODE
  1614. #define PrinterMessageBox  PrinterMessageBoxW
  1615. #else
  1616. #define PrinterMessageBox  PrinterMessageBoxA
  1617. #endif // !UNICODE
  1618.  
  1619.  
  1620.  
  1621. #define PRINTER_ERROR_INFORMATION   0x80000000
  1622. #define PRINTER_ERROR_WARNING       0x40000000
  1623. #define PRINTER_ERROR_SEVERE        0x20000000
  1624.  
  1625. #define PRINTER_ERROR_OUTOFPAPER    0x00000001
  1626. #define PRINTER_ERROR_JAM           0x00000002
  1627. #define PRINTER_ERROR_OUTOFTONER    0x00000004
  1628.  
  1629. BOOL
  1630. WINAPI
  1631. ClosePrinter(
  1632.     HANDLE hPrinter
  1633. );
  1634.  
  1635. BOOL
  1636. WINAPI
  1637. AddFormA(
  1638.     HANDLE  hPrinter,
  1639.     DWORD   Level,
  1640.     LPBYTE  pForm
  1641. );
  1642. BOOL
  1643. WINAPI
  1644. AddFormW(
  1645.     HANDLE  hPrinter,
  1646.     DWORD   Level,
  1647.     LPBYTE  pForm
  1648. );
  1649. #ifdef UNICODE
  1650. #define AddForm  AddFormW
  1651. #else
  1652. #define AddForm  AddFormA
  1653. #endif // !UNICODE
  1654.  
  1655.  
  1656.  
  1657. BOOL
  1658. WINAPI
  1659. DeleteFormA(
  1660.     HANDLE  hPrinter,
  1661.     LPSTR   pFormName
  1662. );
  1663. BOOL
  1664. WINAPI
  1665. DeleteFormW(
  1666.     HANDLE  hPrinter,
  1667.     LPWSTR   pFormName
  1668. );
  1669. #ifdef UNICODE
  1670. #define DeleteForm  DeleteFormW
  1671. #else
  1672. #define DeleteForm  DeleteFormA
  1673. #endif // !UNICODE
  1674.  
  1675.  
  1676.  
  1677. BOOL
  1678. WINAPI
  1679. GetFormA(
  1680.     HANDLE  hPrinter,
  1681.     LPSTR   pFormName,
  1682.     DWORD   Level,
  1683.     LPBYTE  pForm,
  1684.     DWORD   cbBuf,
  1685.     LPDWORD pcbNeeded
  1686. );
  1687. BOOL
  1688. WINAPI
  1689. GetFormW(
  1690.     HANDLE  hPrinter,
  1691.     LPWSTR   pFormName,
  1692.     DWORD   Level,
  1693.     LPBYTE  pForm,
  1694.     DWORD   cbBuf,
  1695.     LPDWORD pcbNeeded
  1696. );
  1697. #ifdef UNICODE
  1698. #define GetForm  GetFormW
  1699. #else
  1700. #define GetForm  GetFormA
  1701. #endif // !UNICODE
  1702.  
  1703.  
  1704.  
  1705. BOOL
  1706. WINAPI
  1707. SetFormA(
  1708.     HANDLE  hPrinter,
  1709.     LPSTR   pFormName,
  1710.     DWORD   Level,
  1711.     LPBYTE  pForm
  1712. );
  1713. BOOL
  1714. WINAPI
  1715. SetFormW(
  1716.     HANDLE  hPrinter,
  1717.     LPWSTR   pFormName,
  1718.     DWORD   Level,
  1719.     LPBYTE  pForm
  1720. );
  1721. #ifdef UNICODE
  1722. #define SetForm  SetFormW
  1723. #else
  1724. #define SetForm  SetFormA
  1725. #endif // !UNICODE
  1726.  
  1727.  
  1728.  
  1729. BOOL
  1730. WINAPI
  1731. EnumFormsA(
  1732.     HANDLE  hPrinter,
  1733.     DWORD   Level,
  1734.     LPBYTE  pForm,
  1735.     DWORD   cbBuf,
  1736.     LPDWORD pcbNeeded,
  1737.     LPDWORD pcReturned
  1738. );
  1739. BOOL
  1740. WINAPI
  1741. EnumFormsW(
  1742.     HANDLE  hPrinter,
  1743.     DWORD   Level,
  1744.     LPBYTE  pForm,
  1745.     DWORD   cbBuf,
  1746.     LPDWORD pcbNeeded,
  1747.     LPDWORD pcReturned
  1748. );
  1749. #ifdef UNICODE
  1750. #define EnumForms  EnumFormsW
  1751. #else
  1752. #define EnumForms  EnumFormsA
  1753. #endif // !UNICODE
  1754.  
  1755.  
  1756.  
  1757. BOOL
  1758. WINAPI
  1759. EnumMonitorsA(
  1760.     LPSTR   pName,
  1761.     DWORD   Level,
  1762.     LPBYTE  pMonitors,
  1763.     DWORD   cbBuf,
  1764.     LPDWORD pcbNeeded,
  1765.     LPDWORD pcReturned
  1766. );
  1767. BOOL
  1768. WINAPI
  1769. EnumMonitorsW(
  1770.     LPWSTR   pName,
  1771.     DWORD   Level,
  1772.     LPBYTE  pMonitors,
  1773.     DWORD   cbBuf,
  1774.     LPDWORD pcbNeeded,
  1775.     LPDWORD pcReturned
  1776. );
  1777. #ifdef UNICODE
  1778. #define EnumMonitors  EnumMonitorsW
  1779. #else
  1780. #define EnumMonitors  EnumMonitorsA
  1781. #endif // !UNICODE
  1782.  
  1783.  
  1784.  
  1785. BOOL
  1786. WINAPI
  1787. AddMonitorA(
  1788.     LPSTR   pName,
  1789.     DWORD   Level,
  1790.     LPBYTE  pMonitors
  1791. );
  1792. BOOL
  1793. WINAPI
  1794. AddMonitorW(
  1795.     LPWSTR   pName,
  1796.     DWORD   Level,
  1797.     LPBYTE  pMonitors
  1798. );
  1799. #ifdef UNICODE
  1800. #define AddMonitor  AddMonitorW
  1801. #else
  1802. #define AddMonitor  AddMonitorA
  1803. #endif // !UNICODE
  1804.  
  1805.  
  1806.  
  1807. BOOL
  1808. WINAPI
  1809. DeleteMonitorA(
  1810.     LPSTR   pName,
  1811.     LPSTR   pEnvironment,
  1812.     LPSTR   pMonitorName
  1813. );
  1814. BOOL
  1815. WINAPI
  1816. DeleteMonitorW(
  1817.     LPWSTR   pName,
  1818.     LPWSTR   pEnvironment,
  1819.     LPWSTR   pMonitorName
  1820. );
  1821. #ifdef UNICODE
  1822. #define DeleteMonitor  DeleteMonitorW
  1823. #else
  1824. #define DeleteMonitor  DeleteMonitorA
  1825. #endif // !UNICODE
  1826.  
  1827.  
  1828.  
  1829. BOOL
  1830. WINAPI
  1831. EnumPortsA(
  1832.     LPSTR   pName,
  1833.     DWORD   Level,
  1834.     LPBYTE  pPorts,
  1835.     DWORD   cbBuf,
  1836.     LPDWORD pcbNeeded,
  1837.     LPDWORD pcReturned
  1838. );
  1839. BOOL
  1840. WINAPI
  1841. EnumPortsW(
  1842.     LPWSTR   pName,
  1843.     DWORD   Level,
  1844.     LPBYTE  pPorts,
  1845.     DWORD   cbBuf,
  1846.     LPDWORD pcbNeeded,
  1847.     LPDWORD pcReturned
  1848. );
  1849. #ifdef UNICODE
  1850. #define EnumPorts  EnumPortsW
  1851. #else
  1852. #define EnumPorts  EnumPortsA
  1853. #endif // !UNICODE
  1854.  
  1855.  
  1856.  
  1857. BOOL
  1858. WINAPI
  1859. AddPortA(
  1860.     LPSTR   pName,
  1861.     HWND    hWnd,
  1862.     LPSTR   pMonitorName
  1863. );
  1864. BOOL
  1865. WINAPI
  1866. AddPortW(
  1867.     LPWSTR   pName,
  1868.     HWND    hWnd,
  1869.     LPWSTR   pMonitorName
  1870. );
  1871. #ifdef UNICODE
  1872. #define AddPort  AddPortW
  1873. #else
  1874. #define AddPort  AddPortA
  1875. #endif // !UNICODE
  1876.  
  1877.  
  1878.  
  1879. BOOL
  1880. WINAPI
  1881. ConfigurePortA(
  1882.     LPSTR   pName,
  1883.     HWND    hWnd,
  1884.     LPSTR   pPortName
  1885. );
  1886. BOOL
  1887. WINAPI
  1888. ConfigurePortW(
  1889.     LPWSTR   pName,
  1890.     HWND    hWnd,
  1891.     LPWSTR   pPortName
  1892. );
  1893. #ifdef UNICODE
  1894. #define ConfigurePort  ConfigurePortW
  1895. #else
  1896. #define ConfigurePort  ConfigurePortA
  1897. #endif // !UNICODE
  1898.  
  1899.  
  1900.  
  1901. BOOL
  1902. WINAPI
  1903. DeletePortA(
  1904.     LPSTR   pName,
  1905.     HWND    hWnd,
  1906.     LPSTR   pPortName
  1907. );
  1908. BOOL
  1909. WINAPI
  1910. DeletePortW(
  1911.     LPWSTR   pName,
  1912.     HWND    hWnd,
  1913.     LPWSTR   pPortName
  1914. );
  1915. #ifdef UNICODE
  1916. #define DeletePort  DeletePortW
  1917. #else
  1918. #define DeletePort  DeletePortA
  1919. #endif // !UNICODE
  1920.  
  1921.  
  1922.  
  1923. BOOL
  1924. WINAPI
  1925. SetPortA(
  1926.     LPSTR     pName,
  1927.     LPSTR     pPortName,
  1928.     DWORD       dwLevel,
  1929.     LPBYTE      pPortInfo
  1930. );
  1931. BOOL
  1932. WINAPI
  1933. SetPortW(
  1934.     LPWSTR     pName,
  1935.     LPWSTR     pPortName,
  1936.     DWORD       dwLevel,
  1937.     LPBYTE      pPortInfo
  1938. );
  1939. #ifdef UNICODE
  1940. #define SetPort  SetPortW
  1941. #else
  1942. #define SetPort  SetPortA
  1943. #endif // !UNICODE
  1944.  
  1945.  
  1946.  
  1947. BOOL
  1948. WINAPI
  1949. AddPrinterConnectionA(
  1950.     LPSTR   pName
  1951. );
  1952. BOOL
  1953. WINAPI
  1954. AddPrinterConnectionW(
  1955.     LPWSTR   pName
  1956. );
  1957. #ifdef UNICODE
  1958. #define AddPrinterConnection  AddPrinterConnectionW
  1959. #else
  1960. #define AddPrinterConnection  AddPrinterConnectionA
  1961. #endif // !UNICODE
  1962.  
  1963.  
  1964.  
  1965. BOOL
  1966. WINAPI
  1967. DeletePrinterConnectionA(
  1968.     LPSTR   pName
  1969. );
  1970. BOOL
  1971. WINAPI
  1972. DeletePrinterConnectionW(
  1973.     LPWSTR   pName
  1974. );
  1975. #ifdef UNICODE
  1976. #define DeletePrinterConnection  DeletePrinterConnectionW
  1977. #else
  1978. #define DeletePrinterConnection  DeletePrinterConnectionA
  1979. #endif // !UNICODE
  1980.  
  1981.  
  1982.  
  1983. HANDLE
  1984. WINAPI
  1985. ConnectToPrinterDlg(
  1986.     HWND    hwnd,
  1987.     DWORD   Flags
  1988. );
  1989.  
  1990. typedef struct _PROVIDOR_INFO_1A{
  1991.     LPSTR     pName;
  1992.     LPSTR     pEnvironment;
  1993.     LPSTR     pDLLName;
  1994. } PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
  1995. typedef struct _PROVIDOR_INFO_1W{
  1996.     LPWSTR    pName;
  1997.     LPWSTR    pEnvironment;
  1998.     LPWSTR    pDLLName;
  1999. } PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
  2000. #ifdef UNICODE
  2001. typedef PROVIDOR_INFO_1W PROVIDOR_INFO_1;
  2002. typedef PPROVIDOR_INFO_1W PPROVIDOR_INFO_1;
  2003. typedef LPPROVIDOR_INFO_1W LPPROVIDOR_INFO_1;
  2004. #else
  2005. typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1;
  2006. typedef PPROVIDOR_INFO_1A PPROVIDOR_INFO_1;
  2007. typedef LPPROVIDOR_INFO_1A LPPROVIDOR_INFO_1;
  2008. #endif // UNICODE
  2009.  
  2010.  
  2011.  
  2012. BOOL
  2013. WINAPI
  2014. AddPrintProvidorA(
  2015.     LPSTR  pName,
  2016.     DWORD    level,
  2017.     LPBYTE   pProvidorInfo
  2018. );
  2019. BOOL
  2020. WINAPI
  2021. AddPrintProvidorW(
  2022.     LPWSTR  pName,
  2023.     DWORD    level,
  2024.     LPBYTE   pProvidorInfo
  2025. );
  2026. #ifdef UNICODE
  2027. #define AddPrintProvidor  AddPrintProvidorW
  2028. #else
  2029. #define AddPrintProvidor  AddPrintProvidorA
  2030. #endif // !UNICODE
  2031.  
  2032. BOOL
  2033. WINAPI
  2034. DeletePrintProvidorA(
  2035.     LPSTR   pName,
  2036.     LPSTR   pEnvironment,
  2037.     LPSTR   pPrintProvidorName
  2038. );
  2039. BOOL
  2040. WINAPI
  2041. DeletePrintProvidorW(
  2042.     LPWSTR   pName,
  2043.     LPWSTR   pEnvironment,
  2044.     LPWSTR   pPrintProvidorName
  2045. );
  2046. #ifdef UNICODE
  2047. #define DeletePrintProvidor  DeletePrintProvidorW
  2048. #else
  2049. #define DeletePrintProvidor  DeletePrintProvidorA
  2050. #endif // !UNICODE
  2051.  
  2052.  
  2053.  
  2054. /*
  2055.  * SetPrinterData and GetPrinterData Server Handle Key values
  2056.  */
  2057.  
  2058. #define    SPLREG_DEFAULT_SPOOL_DIRECTORY             TEXT("DefaultSpoolDirectory")
  2059. #define    SPLREG_PORT_THREAD_PRIORITY_DEFAULT        TEXT("PortThreadPriorityDefault")
  2060. #define    SPLREG_PORT_THREAD_PRIORITY                TEXT("PortThreadPriority")
  2061. #define    SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT   TEXT("SchedulerThreadPriorityDefault")
  2062. #define    SPLREG_SCHEDULER_THREAD_PRIORITY           TEXT("SchedulerThreadPriority")
  2063. #define    SPLREG_BEEP_ENABLED                        TEXT("BeepEnabled")
  2064. #define    SPLREG_NET_POPUP                           TEXT("NetPopup")
  2065. #define    SPLREG_EVENT_LOG                           TEXT("EventLog")
  2066. #define    SPLREG_MAJOR_VERSION                       TEXT("MajorVersion")
  2067. #define    SPLREG_MINOR_VERSION                       TEXT("MinorVersion")
  2068. #define    SPLREG_ARCHITECTURE                        TEXT("Architecture")
  2069.  
  2070.  
  2071. #define SERVER_ACCESS_ADMINISTER    0x00000001
  2072. #define SERVER_ACCESS_ENUMERATE     0x00000002
  2073.  
  2074. #define PRINTER_ACCESS_ADMINISTER   0x00000004
  2075. #define PRINTER_ACCESS_USE          0x00000008
  2076.  
  2077. #define JOB_ACCESS_ADMINISTER       0x00000010
  2078.  
  2079.  
  2080. /*
  2081.  * Access rights for print servers
  2082.  */
  2083.  
  2084. #define SERVER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED      |\
  2085.                               SERVER_ACCESS_ADMINISTER      |\
  2086.                               SERVER_ACCESS_ENUMERATE)
  2087.  
  2088. #define SERVER_READ          (STANDARD_RIGHTS_READ          |\
  2089.                               SERVER_ACCESS_ENUMERATE)
  2090.  
  2091. #define SERVER_WRITE         (STANDARD_RIGHTS_WRITE         |\
  2092.                               SERVER_ACCESS_ADMINISTER      |\
  2093.                               SERVER_ACCESS_ENUMERATE)
  2094.  
  2095. #define SERVER_EXECUTE       (STANDARD_RIGHTS_EXECUTE       |\
  2096.                               SERVER_ACCESS_ENUMERATE)
  2097.  
  2098. /*
  2099.  * Access rights for printers
  2100.  */
  2101.  
  2102. #define PRINTER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED     |\
  2103.                                PRINTER_ACCESS_ADMINISTER    |\
  2104.                                PRINTER_ACCESS_USE)
  2105.  
  2106. #define PRINTER_READ          (STANDARD_RIGHTS_READ         |\
  2107.                                PRINTER_ACCESS_USE)
  2108.  
  2109. #define PRINTER_WRITE         (STANDARD_RIGHTS_WRITE        |\
  2110.                                PRINTER_ACCESS_USE)
  2111.  
  2112. #define PRINTER_EXECUTE       (STANDARD_RIGHTS_EXECUTE      |\
  2113.                                PRINTER_ACCESS_USE)
  2114.  
  2115. /*
  2116.  * Access rights for jobs
  2117.  */
  2118.  
  2119. #define JOB_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED    |\
  2120.                                 JOB_ACCESS_ADMINISTER)
  2121.  
  2122. #define JOB_READ               (STANDARD_RIGHTS_READ        |\
  2123.                                 JOB_ACCESS_ADMINISTER)
  2124.  
  2125. #define JOB_WRITE              (STANDARD_RIGHTS_WRITE       |\
  2126.                                 JOB_ACCESS_ADMINISTER)
  2127.  
  2128. #define JOB_EXECUTE            (STANDARD_RIGHTS_EXECUTE     |\
  2129.                                 JOB_ACCESS_ADMINISTER)
  2130.  
  2131.  
  2132. #ifdef __cplusplus
  2133. }
  2134. #endif
  2135.  
  2136. #endif // _WINSPOOL_
  2137.